{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "import keras\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from keras.utils import np_utils\n",
    "from keras.models import Sequential,model_from_json\n",
    "from keras.utils.vis_utils import plot_model\n",
    "from keras.layers import SimpleRNN,Dense,Activation,Conv2D,MaxPool2D,Dropout,Flatten,MaxPooling2D,AveragePooling2D\n",
    "from keras.optimizers import SGD,Adam\n",
    "from keras.preprocessing.image import ImageDataGenerator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数据集的数量为： 35887\n"
     ]
    }
   ],
   "source": [
    "path = r\"D:\\AI\\fer2013\\fer2013.csv\"\n",
    "data = pd.read_csv(path)\n",
    "num_of_instances = len(data) #获取数据集的数量\n",
    "print(\"数据集的数量为：\",num_of_instances)\n",
    "\n",
    "pixels = data['pixels']\n",
    "emotions = data['emotion']\n",
    "usages = data['Usage']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_classes = 7   #表情的类别数目\n",
    "x_train,y_train,x_test,y_test = [],[],[],[]\n",
    "\n",
    "for emotion,img,usage in zip(emotions,pixels,usages):    \n",
    "    try: \n",
    "        emotion = keras.utils.to_categorical(emotion,num_classes)   # 独热向量编码\n",
    "        val = img.split(\" \")\n",
    "        pixels = np.array(val,'float32')\n",
    "        \n",
    "        if(usage == 'Training'):\n",
    "            x_train.append(pixels)\n",
    "            y_train.append(emotion)\n",
    "        elif(usage == 'PublicTest'):\n",
    "            x_test.append(pixels)\n",
    "            y_test.append(emotion)\n",
    "    except:\n",
    "        print(\"\",end=\"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "x_train = np.array(x_train)\n",
    "y_train = np.array(y_train)\n",
    "x_train = x_train.reshape(-1,48,48,1)\n",
    "x_test = np.array(x_test)\n",
    "y_test = np.array(y_test)\n",
    "x_test = x_test.reshape(-1,48,48,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "i = np.random.randint(0,len(x_train))\n",
    "plt.gray()\n",
    "plt.imshow(x_train[i].reshape([48,48]))\n",
    "data['emotion'][i]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 28709 samples, validate on 3589 samples\n",
      "Epoch 1/30\n",
      "28709/28709 [==============================] - 29s 1ms/step - loss: 2.6478 - acc: 0.2303 - val_loss: 1.7867 - val_acc: 0.2510\n",
      "Epoch 2/30\n",
      "28709/28709 [==============================] - 28s 965us/step - loss: 1.7130 - acc: 0.3132 - val_loss: 1.5790 - val_acc: 0.3831\n",
      "Epoch 3/30\n",
      "28709/28709 [==============================] - 28s 966us/step - loss: 1.5632 - acc: 0.3956 - val_loss: 1.4960 - val_acc: 0.4129\n",
      "Epoch 4/30\n",
      "28709/28709 [==============================] - 28s 967us/step - loss: 1.4696 - acc: 0.4366 - val_loss: 1.4259 - val_acc: 0.4472\n",
      "Epoch 5/30\n",
      "28709/28709 [==============================] - 28s 964us/step - loss: 1.3748 - acc: 0.4759 - val_loss: 1.3700 - val_acc: 0.4790\n",
      "Epoch 6/30\n",
      "28709/28709 [==============================] - 28s 965us/step - loss: 1.2918 - acc: 0.5088 - val_loss: 1.3131 - val_acc: 0.4915\n",
      "Epoch 7/30\n",
      "28709/28709 [==============================] - 28s 966us/step - loss: 1.2260 - acc: 0.5335 - val_loss: 1.2658 - val_acc: 0.5219\n",
      "Epoch 8/30\n",
      "28709/28709 [==============================] - 28s 966us/step - loss: 1.1217 - acc: 0.5765 - val_loss: 1.2473 - val_acc: 0.5333\n",
      "Epoch 9/30\n",
      "28709/28709 [==============================] - 28s 967us/step - loss: 1.0415 - acc: 0.6096 - val_loss: 1.2473 - val_acc: 0.5467\n",
      "Epoch 10/30\n",
      "28709/28709 [==============================] - 28s 967us/step - loss: 0.9670 - acc: 0.6349 - val_loss: 1.2457 - val_acc: 0.5436\n",
      "Epoch 11/30\n",
      "28709/28709 [==============================] - 28s 966us/step - loss: 0.8787 - acc: 0.6713 - val_loss: 1.2582 - val_acc: 0.5542\n",
      "Epoch 12/30\n",
      "28709/28709 [==============================] - 28s 965us/step - loss: 0.7897 - acc: 0.7088 - val_loss: 1.3186 - val_acc: 0.5531\n",
      "Epoch 13/30\n",
      "28709/28709 [==============================] - 28s 965us/step - loss: 0.6879 - acc: 0.7466 - val_loss: 1.3759 - val_acc: 0.5639\n",
      "Epoch 14/30\n",
      "28709/28709 [==============================] - 28s 965us/step - loss: 0.6160 - acc: 0.7729 - val_loss: 1.4592 - val_acc: 0.5372\n",
      "Epoch 15/30\n",
      "28709/28709 [==============================] - 28s 964us/step - loss: 0.5471 - acc: 0.7980 - val_loss: 1.5085 - val_acc: 0.5642\n",
      "Epoch 16/30\n",
      "28709/28709 [==============================] - 28s 963us/step - loss: 0.4756 - acc: 0.8282 - val_loss: 1.7179 - val_acc: 0.5581\n",
      "Epoch 17/30\n",
      "28709/28709 [==============================] - 28s 962us/step - loss: 0.4279 - acc: 0.8443 - val_loss: 1.7714 - val_acc: 0.5534\n",
      "Epoch 18/30\n",
      "28709/28709 [==============================] - 28s 967us/step - loss: 0.3655 - acc: 0.8683 - val_loss: 1.9114 - val_acc: 0.5500\n",
      "Epoch 19/30\n",
      "28709/28709 [==============================] - 28s 966us/step - loss: 0.3429 - acc: 0.8755 - val_loss: 1.8646 - val_acc: 0.5528\n",
      "Epoch 20/30\n",
      "28709/28709 [==============================] - 28s 964us/step - loss: 0.3013 - acc: 0.8939 - val_loss: 2.1350 - val_acc: 0.5550\n",
      "Epoch 21/30\n",
      "28709/28709 [==============================] - 28s 962us/step - loss: 0.2639 - acc: 0.9058 - val_loss: 2.2359 - val_acc: 0.5567\n",
      "Epoch 22/30\n",
      "28709/28709 [==============================] - 28s 960us/step - loss: 0.2389 - acc: 0.9168 - val_loss: 2.2652 - val_acc: 0.5609\n",
      "Epoch 23/30\n",
      "28709/28709 [==============================] - 28s 960us/step - loss: 0.2411 - acc: 0.9147 - val_loss: 2.3555 - val_acc: 0.5623\n",
      "Epoch 24/30\n",
      "28709/28709 [==============================] - 27s 958us/step - loss: 0.2206 - acc: 0.9236 - val_loss: 2.2361 - val_acc: 0.5592\n",
      "Epoch 25/30\n",
      "28709/28709 [==============================] - 28s 958us/step - loss: 0.1801 - acc: 0.9378 - val_loss: 2.5059 - val_acc: 0.5464\n",
      "Epoch 26/30\n",
      "28709/28709 [==============================] - 28s 962us/step - loss: 0.1793 - acc: 0.9390 - val_loss: 2.3200 - val_acc: 0.5506\n",
      "Epoch 27/30\n",
      "28709/28709 [==============================] - 27s 957us/step - loss: 0.1790 - acc: 0.9387 - val_loss: 2.6356 - val_acc: 0.5430\n",
      "Epoch 28/30\n",
      "28709/28709 [==============================] - 27s 957us/step - loss: 0.1711 - acc: 0.9415 - val_loss: 2.4450 - val_acc: 0.5536\n",
      "Epoch 29/30\n",
      "28709/28709 [==============================] - 27s 958us/step - loss: 0.1459 - acc: 0.9505 - val_loss: 2.4328 - val_acc: 0.5534\n",
      "Epoch 30/30\n",
      "28709/28709 [==============================] - 27s 957us/step - loss: 0.1481 - acc: 0.9511 - val_loss: 2.5017 - val_acc: 0.5492\n",
      "Train loss: 0.04352424926905152\n",
      "Train accuracy: 98.81570239297781\n",
      "Test loss: 2.50173274970513\n",
      "Test accuracy: 54.91780440275568\n"
     ]
    }
   ],
   "source": [
    "batch_size = 500\n",
    "epochs = 30\n",
    "\n",
    "model = Sequential()\n",
    "\n",
    "#第一层卷积层\n",
    "model.add(Conv2D(input_shape=(48,48,1),filters=32,kernel_size=3,padding='same',activation='relu'))\n",
    "model.add(Conv2D(filters=32,kernel_size=3,padding='same',activation='relu'))\n",
    "model.add(MaxPool2D(pool_size=2, strides=2))\n",
    "\n",
    "#第二层卷积层\n",
    "model.add(Conv2D(filters=64,kernel_size=3,padding='same',activation='relu'))\n",
    "model.add(Conv2D(filters=64,kernel_size=3,padding='same',activation='relu'))\n",
    "model.add(MaxPool2D(pool_size=2, strides=2))\n",
    "\n",
    "#第三层卷积层\n",
    "model.add(Conv2D(filters=128,kernel_size=3,padding='same',activation='relu'))\n",
    "model.add(Conv2D(filters=128,kernel_size=3,padding='same',activation='relu'))\n",
    "model.add(MaxPool2D(pool_size=2, strides=2))\n",
    "\n",
    "model.add(Flatten())\n",
    "\n",
    "#全连接层\n",
    "model.add(Dense(256,activation = 'relu'))\n",
    "model.add(Dropout(0.2))\n",
    "model.add(Dense(128,activation = 'relu'))\n",
    "model.add(Dropout(0.2))\n",
    "model.add(Dense(7,activation = 'softmax'))\n",
    "\n",
    "# #1st convolution layer\n",
    "# model.add(Conv2D(64, (5, 5), activation='relu', input_shape=(48,48,1)))\n",
    "# model.add(MaxPooling2D(pool_size=(5,5), strides=(2, 2)))\n",
    " \n",
    "# #2nd convolution layer\n",
    "# model.add(Conv2D(64, (3, 3), activation='relu'))\n",
    "# model.add(Conv2D(64, (3, 3), activation='relu'))\n",
    "# model.add(AveragePooling2D(pool_size=(3,3), strides=(2, 2)))\n",
    " \n",
    "# #3rd convolution layer\n",
    "# model.add(Conv2D(128, (3, 3), activation='relu'))\n",
    "# model.add(Conv2D(128, (3, 3), activation='relu'))\n",
    "# model.add(AveragePooling2D(pool_size=(3,3), strides=(2, 2)))\n",
    " \n",
    "# model.add(Flatten())\n",
    " \n",
    "# #fully connected neural networks\n",
    "# model.add(Dense(1024, activation='relu'))\n",
    "# model.add(Dropout(1.0))\n",
    "# model.add(Dense(1024, activation='relu'))\n",
    "# model.add(Dropout(1.0))\n",
    "# model.add(Dense(num_classes, activation='softmax'))\n",
    "\n",
    "sgd=SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)\n",
    "\n",
    "#进行训练\n",
    "model.compile(loss = 'categorical_crossentropy',optimizer = Adam(),metrics=['accuracy'])\n",
    "history = model.fit(x_train,y_train,batch_size=batch_size,epochs=epochs,validation_data=(x_test,y_test))\n",
    "\n",
    "\n",
    "train_score = model.evaluate(x_train, y_train, verbose=0)\n",
    "print('Train loss:', train_score[0])\n",
    "print('Train accuracy:', 100*train_score[1])\n",
    " \n",
    "test_score = model.evaluate(x_test, y_test, verbose=0)\n",
    "print('Test loss:', test_score[0])\n",
    "print('Test accuracy:', 100*test_score[1])\n",
    "\n",
    "model.save('my_model.h5')\n",
    "# model_json = model.to_json()\n",
    "# open('my_model_json.json', 'w').write(model_json)\n",
    "# model.save_weights('my_model_weights.h5')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "loss = history.history['loss']\n",
    "val_loss = history.history['val_loss']\n",
    "acc = history.history['acc']\n",
    "val_acc = history.history['val_acc']\n",
    "# make a figure\n",
    "fig = plt.figure(figsize=(8,4))\n",
    "# subplot loss\n",
    "ax1 = fig.add_subplot(121)\n",
    "ax1.plot(loss,label='train_loss')\n",
    "ax1.plot(val_loss,label='val_loss')\n",
    "ax1.set_xlabel('Epochs')\n",
    "ax1.set_ylabel('Loss')\n",
    "ax1.set_title('Loss on Training and Validation Data')\n",
    "ax1.legend()\n",
    "# subplot acc\n",
    "ax2 = fig.add_subplot(122)\n",
    "ax2.plot(acc,label='train_acc')\n",
    "ax2.plot(val_acc,label='val_acc')\n",
    "ax2.set_xlabel('Epochs')\n",
    "ax2.set_ylabel('Accuracy')\n",
    "ax2.set_title('Accuracy  on Training and Validation Data')\n",
    "ax2.legend()\n",
    "plt.tight_layout()\n",
    "# plot_model(model,to_file=('model.png'),show_shapes=True,show_layer_names=False,rankdir='TB')\n",
    "# plt.figure(figsize=(10,10))\n",
    "# img = plt.imread('model.png')\n",
    "# plt.axis('off')\n",
    "# plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
